#ifndef SSHMANAGER_H
#define SSHMANAGER_H

#include <QObject>
#include <QList>
#include <QMap>
#include <QMutex>
#include <QTimer>

// 前向声明
class SshSession;

#ifndef LIBSSH2_STATIC
#define LIBSSH2_STATIC
#endif
#include <libssh2.h>
#include <libssh2_sftp.h>

/**
 * @brief SSH连接管理器
 *
 * 管理所有SSH连接的生命周期，提供连接池功能
 * 支持连接复用和会话管理
 */
class SshManager : public QObject
{
    Q_OBJECT

public:
    explicit SshManager(QObject *parent = nullptr);
    ~SshManager();

    // 连接配置结构
    struct ConnectionConfig {
        QString host;
        int port;
        QString username;
        QString password;
        QString privateKeyPath;
        int timeout;
        bool keepAlive;

        ConnectionConfig() : port(22), timeout(30), keepAlive(true) {}
    };

    // 创建新的SSH会话
    SshSession* createSession(const ConnectionConfig &config);

    // 获取现有会话
    SshSession* getSession(const QString &sessionId);

    // 关闭会话
    void closeSession(const QString &sessionId);

    // 关闭所有会话
    void closeAllSessions();

    // 获取所有会话列表
    QList<SshSession*> getActiveSessions();

    // 检查连接状态
    bool isSessionActive(const QString &sessionId);

signals:
    void sessionConnected(const QString &sessionId);
    void sessionDisconnected(const QString &sessionId);
    void sessionError(const QString &sessionId, const QString &error);
    void connectionProgress(const QString &sessionId, const QString &stage, int progress);

private:
    QMap<QString, SshSession*> m_sessions;
    QMutex m_mutex;

    // 生成唯一的会话ID
    QString generateSessionId() const;

    // 初始化libssh2
    bool initializeLibssh2();

    // 清理libssh2
    void cleanupLibssh2();
};

#endif // SSHMANAGER_H
